package com.itheima.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.common.DefaultException;
import com.itheima.common.Paging;
import com.itheima.dto.NoticeDto;
import com.itheima.dto.PageNoticeDto;
import com.itheima.dto.UpdateNoticeDto;
import com.itheima.entity.Notice;
import com.itheima.vo.NoticePersonVo;
import com.itheima.vo.NoticeVo;
import com.itheima.vo.WebsocketVo;
import com.itheima.vo.organization.OrganizationVo;

import java.util.List;

/**
 * @author 51585
 * @description 针对表【notice】的数据库操作Service
 * @createDate 2022-11-03 13:46:07
 */
public interface NoticeService extends IService<Notice> {

    /**
     * 发送通知
     *
     * @param noticeDto
     * @throws Exception
     */
    void sendNotice(NoticeDto noticeDto) throws Exception;

    /**
     * 确认收到通知
     *
     * @param noticeId
     * @throws Exception
     */
    void acceptNotice(Integer noticeId) throws Exception;

    /**
     * 删除通知
     *
     * @param noticeId
     * @throws Exception
     */
    void deleteNotice(Integer noticeId) throws Exception;

    /**
     * 分页展示通知信息（自己发布的）
     *
     * @param pageNoticeDto
     * @return
     */
    Paging<NoticeVo> pageNotice(PageNoticeDto pageNoticeDto) throws Exception;

    /**
     * 分页展示通知信息（需要处理的）
     *
     * @param pageNoticeDto
     * @return
     */
    Paging<NoticePersonVo> pageNoticePerson(PageNoticeDto pageNoticeDto) throws Exception;

    /**
     * 展示可通知的用户
     *
     * @param organizationId
     * @return
     */
    OrganizationVo showUser(Integer organizationId) throws DefaultException;

    /**
     * 更新通知
     *
     * @param updateNoticeDto
     * @throws Exception
     */
    void updateNotice(UpdateNoticeDto updateNoticeDto) throws Exception;

    /**
     * 给未读通知的用户发送短信
     * @throws Exception 异常
     */
    void remindUser() throws Exception;

    /**
     * 查看当前登录用户是否有未读通知，如果有则进行推送
     *
     * @param userId 用户id
     * @return webSocket服务端到客户端vo
     */
    List<WebsocketVo> offlineNotice(String userId);
}
